#include<iostream>
#include <vector>
#include <queue>
using namespace std;
int n,m,mm=0,ml;
vector<int> mem[105];
void bfs(int root)
{
    int level = 2,count,size;
    queue<int> q;
    for(int i = 0; i < mem[root].size() ; i ++)
    {
        q.push(mem[root][i]);
    }
    count = mem[root].size();
    if(count > mm)
    {
        mm = count;
        ml = level;
    }
    while(!q.empty())
    {
        // 遍历当前层中的所有结点，将此层的所有儿子结点入栈
        level ++;
        size = count;
        count = 0;
        for(int i = 0; i < size; i ++)
        {
            int t = q.front();
            q.pop();
            for (int j = 0; j < mem[t].size(); j ++)
            {
                q.push(mem[t][j]);
            }
            count += mem[t].size();
        }
        if(mm < count)
        {
            mm = count;
            ml = level;
        }
    }
}
int main()
{
    int id,t,tid;
    scanf("%d %d", &n, &m);
    for(int i = 0; i < m; i ++)
    {
        scanf("%d %d",&id, &t);
        for (int j = 0; j < t; j ++)
        {
            scanf("%d", &tid);
            mem[id].push_back(tid);
        }
    }
    if(mem[1].size()==0)
    {
        printf("%d %d",1,1);
        return 0;
    }
    bfs(1);
    printf("%d %d",mm,ml);
    return 0;
}